import { GoGoAST } from "gogocode";
import defaultConfig from "../config";
import { Identifier } from "@babel/types";

/**
 * 判断字符串是否是中文
 * @param str 字符串
 * @param reg 正则表达式
 * @param WHITELIST_WORDS 白名单词汇
 * @returns 是否是中文
 */
export function isChinese(
  str: string,
  reg: string = defaultConfig.CHINESE_REGEX,
  WHITELIST_WORDS: string[] = []
) {
  if (WHITELIST_WORDS.includes(str)) {
    return false;
  }
  const Reg = new RegExp(`[${reg}]+`);
  return typeof str === "string" ? Reg.test(str) : false;
}

/**
 * 判断文本中是否包含中文
 * @param text 文本内容
 * @param reg 正则表达式
 * @returns 是否包含中文
 */
export function hasChinese(
  text: string = "",
  reg: string = defaultConfig.CHINESE_REGEX
) {
  const Reg = new RegExp(`[${reg}]+`);
  return typeof text === "string" ? text.search(Reg) > -1 : false;
}

/**
 * 判断文件名是否被排除
 * @param fileName 文件名
 * @param exclude 排除项
 * @returns
 */
export function isExcluded(fileName: string, exclude: string[] = []) {
  // 如果没有排除项，直接返回false
  if (exclude.length === 0) {
    return false;
  }
  // 检查通配符匹配
  if (exclude.some((item) => item.includes("*"))) {
    const regex = new RegExp(
      exclude.map((item) => item.replace(/\*/g, ".*")).join("|")
    );

    return regex.test(fileName);
  }
  // 检查确定匹配
  return exclude.some((item) => fileName.includes(item));
}

export const isInProps = (el: GoGoAST) => {
  const parentNode = el.parent(5).node;
  if (parentNode.type === "ObjectProperty") {
    return (parentNode.key as Identifier).name === "props";
  } else {
    return false;
  }
};
